/**  
* Copyright (c) 2008, Noel Lynch All rights reserved. Redistribution and use  
* in source and binary forms, with or without modification, are permitted  
* provided that the following conditions are met: Redistributions of source  
* code must retain the above copyright notice, this list of conditions and the  
* following disclaimer. Redistributions in binary form must reproduce the above  
* copyright notice, this list of conditions and the following disclaimer in the  
* documentation and/or other materials provided with the distribution. Neither  
* the name of Noel Lynch nor the names of contributors may be used to  
* endorse or promote products derived from this software without specific prior  
* written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT  
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR  
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF  
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
*/
// Nov 26, 2008

package com.sceneworker.extensions.clodmesh;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.Callable;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.jme.util.GameTaskQueueManager;
import com.myjavautils.swing.SwingComponentFactory;
import com.sceneworker.app.globals.SceneWorkerDialogManager;
import com.sceneworker.util.swing.celleditor.SceneWorkerCustomCellEditor;

public class TargetPropertyEditor extends SceneWorkerCustomCellEditor {

	private		TargetPropertyObject		mcl_value;
	
	public TargetPropertyEditor() {
		super(SceneWorkerDialogManager.CLODTARGET_EDITOR_DIALOG);
		setDialogInCell();
		
	}

	@Override
	public Object getCellEditorValue() {
		mcl_value.setValue(mcl_value.getValue());

		return mcl_value;
	}

	@Override
	public JPanel getCustomPanel() {
		JPanel			lcl_panel = new JPanel();
		BoxLayout		lcl_boxLayout = new BoxLayout(lcl_panel, BoxLayout.X_AXIS);
		lcl_panel.setLayout(lcl_boxLayout);
		
		final	JSlider			lcl_slider = new JSlider(0, mcl_value.getValue().getRecordQuantity());
		lcl_slider.setValue(mcl_value.getValue().getTargetRecord());
		lcl_slider.addChangeListener(new ChangeListener() {

			public void stateChanged(ChangeEvent e) {
				GameTaskQueueManager.getManager().update(new Callable<Void>() {

					public Void call() throws Exception {
						mcl_value.getValue().setTargetRecord(lcl_slider.getValue());
						return null;
					}
					
				});
				
			}
			
		});
		lcl_panel.add(lcl_slider);
		
		JButton			lcl_btn = SwingComponentFactory.makeAButton("Done");
		lcl_btn.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				mcl_dialog.setVisible(false);
			}
			
		});
		lcl_panel.add(lcl_btn);
		
		return lcl_panel;
	}

	@Override
	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {
		if (value instanceof TargetPropertyObject) {
			mcl_value = (TargetPropertyObject)value;
		}
		
		return mcl_edit;
		
	}

}
